четверг, 3 января 2019 г.

Настройка systemd для запуска PostgreSQL от 1С

Платформа 8.3 → Ubuntu 16.04: PostgreSQL, версия 10.3-3.1C вопросы к разработчикам!
Вариант от Самарина Александра (Эника, Ивантеевка)
За что Александру огромное спасибо!

$ sudo nano /etc/systemd/system/postgres.service

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres

Environment=PGROOT=/var/lib/postgres

SyslogIdentifier=postgres
PIDFile=/var/lib/postgres/data/postmaster.pid
RuntimeDirectory=postgresql
RuntimeDirectoryMode=755

ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data
ExecStart= /usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop=  /usr/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast

# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in
# killing Postgres, so adjust it downward
OOMScoreAdjust=-200

# Additional security-related features
PrivateTmp=true
ProtectHome=true
ProtectSystem=full
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Сохранить.

Команды:

$ sudo systemctl daemon-reload  # запускать после изменений файла
$ sudo systemctl start postgres.service
$ sudo systemctl stop postgres.service
$ sudo systemctl restart postgres.service
$ sudo systemctl status postgres.service
 

Можно сравнить с shell-скриптом на любом дистрибутиве. Выиграет, думаю, только Gentoo и FreeBSD за счет огромных openrc и rc.subr. Но в них все равно есть отдельный init с костыльным inittab и runlevels, который поддерживается другими людьми, отдельно supervisord и daemon-start-stop, forever и т.п.

В случае 1C сервис на systemd адекватно отрабатывает любые действия с сервером 1С. Описание на 20 строк, все очевидны. А собственный скрипт от 1С не позволяет включить отладку и перезапустить сервер, т.к. при смене флагов он не может найти и убить процессы. Приходится сначала останавливать сервер, потом менять флаги, потом запускать сервер.

Я тоже не в восторге от pssssshulseaudio и systemd (в основном от сетевой части и systemd-nspawn), но свою задачу он выполняет и быстрее шелла.

А "ОС в ОС" нам и так хватает: firefox, chrome, grub и сама 1С.

Настройка systemd для запуска второго сервера 1С

Платформа 8.3 → Ручной запуск второй копии сервера 1С на linux ubuntu 16.04
Вариант от Самарина Александра (Эника, Ивантеевка)
За что Александру огромное спасибо!

Порты указаны стандартные не второго сервера!
Для проверки можно запустить так:
sudo /bin/su usr1cv8 -c "/opt/1C/v8.3/x86_64/ragent -d /home/usr1cv8/.1cv8/1C/1cv8 -port 1540 -regport 1541 -range 1560:1590 -seclev 0 -debug"


$ service srv1cv83 status
$ sudo  systemctl stop srv1cv83

$ sudo nano /etc/systemd/system/1cv83-something.service

#
# 1cv83.service
#

[Unit]
Description=1C:Enterprise Server
Wants=network.target
After=network.target

[Service]
Type=simple
Environment=LANG=ru_RU.UTF-8
Environment=TZ=Europe/Moscow
ExecStart=/opt/1C/v8.3/x86_64/ragent -d /home/usr1cv8/.1cv8/1C/1cv8 -port 1540 -regport 1541 -range 1560:1590 -seclev 0 -debug
Restart=always
RestartSec=3
User=usr1cv8

[Install]
WantedBy=multi-user.target


Сохранить.

Команды:

$ sudo systemctl daemon-reload  # запускать после изменений файла
$ sudo systemctl start 1cv83-something.service
$ sudo systemctl stop 1cv83-something.service
$ sudo systemctl restart 1cv83-something.service
$ sudo systemctl status 1cv83-something.service

Если хочется автоматический запуск:

$ sudo  systemctl enable 1cv83-something.service

Если хочется при этом отказаться от оригинального скрипта:
$ sudo  systemctl disable srv1cv83  # отключить автоматический запуск
$ sudo  systemctl mask srv1cv83  # запретить запуск вообще


Плюсы:
20 строк против 497
Можно изменить флаги и сделать restart. Оригинальный скрипт такого не умеет.
Сервер 1С автоматически перезапускается при падении
systemctl stop завершает мертвые rmngr и rphost, если помер агент

Минусы:
Это systemd
Не поддерживается разработчиками 1С

Как скачать дистрибутивы PostgreSQL от 1С ubuntu/debian в терминале

Как скачать дистрибутивы 1С ubuntu/debian в терминале
Скрипт сборки docker контейнера с толстым клиентом 1С
Идея понравилась сделал свой скрипт:


$ nano download_pg.sh

#!/bin/bash

#20180809

USERNAME='вставить'
PASSWORD='вставить'

if [[ -z "$USERNAME" ]];then
    echo "USERNAME not set"
    exit 1
fi

if [[ -z "$PASSWORD" ]];then
    echo "PASSWORD not set"
    exit 1
fi

echo "Getting versions, please wait."

SRC=$(curl -c /tmp/cookies.txt -s -L https://releases.1c.ru)

ACTION=$(echo "$SRC" | grep -oP '(?<=form method="post" id="loginForm" action=")[^"]+(?=")')
EXECUTION=$(echo "$SRC" | grep -oP '(?<=input type="hidden" name="execution" value=")[^"]+(?=")')

curl -s -L \
    -o /dev/null \
    -b /tmp/cookies.txt \
    -c /tmp/cookies.txt \
    --data-urlencode "inviteCode=" \
    --data-urlencode "execution=$EXECUTION" \
    --data-urlencode "_eventId=submit" \
    --data-urlencode "username=$USERNAME" \
    --data-urlencode "password=$PASSWORD" \
    https://login.1c.ru"$ACTION"


if ! grep -q "TGC" /tmp/cookies.txt ;then
    echo "Auth failed"
    exit 1
fi

clear

curl -s -b /tmp/cookies.txt https://releases.1c.ru/project/AddCompPostgre |

    grep 'a href="/version_files?nick=AddCompPostgre' |
    tr -s '="  ' ' ' |
    awk -F ' ' '{print $5}' |
    sort -Vr | pr -T -5

read -i  "10.5-9.1C" -p "Input version for download: " -e VER
echo $VER

if [[ -z "$VER" ]];then
    echo "VERSION not set"
    exit 1
fi

#if [[ "8.3." = "$VER" ]];then
#    echo "Need full VERSION number"
#    exit 1
#fi

VER1=${VER//./_}
VER1=${VER1//-/_}
VER2=${VER//-/_}

POSTGRESQL=$(curl -s -G \
    -b /tmp/cookies.txt \
    --data-urlencode "nick=AddCompPostgre" \
    --data-urlencode "ver=$VER" \
    --data-urlencode "path=AddCompPostgre\\$VER1\\postgresql_${VER2}_amd64_deb.tar.bz2" \
    https://releases.1c.ru/version_file | grep -oP '(?<=a href=")[^"]+(?=">Скачать дистрибутив)')

#echo $CLIENTLINK

ADDON=$(curl -s -G \
    -b /tmp/cookies.txt \
    --data-urlencode "nick=AddCompPostgre" \
    --data-urlencode "ver=$VER" \
    --data-urlencode "path=AddCompPostgre\\$VER1\\postgresql_${VER2}_amd64_addon_deb.tar.bz2" \
    https://releases.1c.ru/version_file | grep -oP '(?<=a href=")[^"]+(?=">Скачать дистрибутив)')

#echo $SERVERLINK

mkdir -p dist

curl --fail -b /tmp/cookies.txt -o dist/postgresql_${VER2}_amd64_deb.tar.bz2 -L "$POSTGRESQL"

curl --fail -b /tmp/cookies.txt -o dist/postgresql_${VER2}_amd64_addon_deb.tar.bz2 -L "$ADDON"


rm /tmp/cookies.txt

Сохранить.

$ chmod +x download_pg.sh
$ ./download_pg.sh

Как скачать дистрибутивы 1С ubuntu/debian в терминале

Как скачать дистрибутивы 1С ubuntu/debian в терминале
Скрипт сборки docker контейнера с толстым клиентом 1С

$ nano download_1c.sh

#!/bin/bash

#20180809

USERNAME='вставить'
PASSWORD='вставить'

if [[ -z "$USERNAME" ]];then
    echo "USERNAME not set"
    exit 1
fi

if [[ -z "$PASSWORD" ]];then
    echo "PASSWORD not set"
    exit 1
fi

echo "Getting versions, please wait."

SRC=$(curl -c /tmp/cookies.txt -s -L https://releases.1c.ru)

ACTION=$(echo "$SRC" | grep -oP '(?<=form method="post" id="loginForm" action=")[^"]+(?=")')
EXECUTION=$(echo "$SRC" | grep -oP '(?<=input type="hidden" name="execution" value=")[^"]+(?=")')

curl -s -L \
    -o /dev/null \
    -b /tmp/cookies.txt \
    -c /tmp/cookies.txt \
    --data-urlencode "inviteCode=" \
    --data-urlencode "execution=$EXECUTION" \
    --data-urlencode "_eventId=submit" \
    --data-urlencode "username=$USERNAME" \
    --data-urlencode "password=$PASSWORD" \
    https://login.1c.ru"$ACTION"


if ! grep -q "TGC" /tmp/cookies.txt ;then
    echo "Auth failed"
    exit 1
fi

clear

curl -s -b /tmp/cookies.txt https://releases.1c.ru/project/Platform83 |

    grep 'a href="/version_files?nick=Platform83' |
    tr -s '="  ' ' ' |
    awk -F ' ' '{print $5}' |
    sort -Vr | pr -T -5

read -i  "8.3." -p "Input version for download: " -e VER

if [[ -z "$VER" ]];then
    echo "VERSION not set"
    exit 1
fi

if [[ "8.3." = "$VER" ]];then
    echo "Need full VERSION number"
    exit 1
fi

VER1=${VER//./_}

CLIENTLINK=$(curl -s -G \
    -b /tmp/cookies.txt \
    --data-urlencode "nick=Platform83" \
    --data-urlencode "ver=$VER" \
    --data-urlencode "path=Platform\\$VER1\\client_$VER1.deb64.tar.gz" \
    https://releases.1c.ru/version_file | grep -oP '(?<=a href=")[^"]+(?=">Скачать дистрибутив)')

SERVERLINK=$(curl -s -G \
    -b /tmp/cookies.txt \
    --data-urlencode "nick=Platform83" \
    --data-urlencode "ver=$VER" \
    --data-urlencode "path=Platform\\$VER1\\deb64_$VER1.tar.gz" \
    https://releases.1c.ru/version_file | grep -oP '(?<=a href=")[^"]+(?=">Скачать дистрибутив)')

mkdir -p dist

curl --fail -b /tmp/cookies.txt -o dist/${VER}_client64.tar.gz -L "$CLIENTLINK"
curl --fail -b /tmp/cookies.txt -o dist/${VER}_server64.tar.gz -L "$SERVERLINK"

rm /tmp/cookies.txt

Сохранить.
$ chmod +x download_1c.sh
$ ./download_1c.sh

вторник, 1 января 2019 г.

Настройка ufw совместно с docker

Fail2ban варианты настройки для wordpress в docker

Настройка nginx в Docker-compose

Docker-compose: идеальное рабочее окружение

$ sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

$ mkdir  -p /home/user/production_nginx
$ nano /home/user/production_nginx/docker-compose.yml

version: '3'

services:
   nginx:
    image: nginx:latest
    container_name: production_nginx
    volumes:
     - ./src:/usr/share/nginx/html
     - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    restart: always
    ports:
      - 80:80
      - 443:443

Сохранить.


$ sudo nano /home/user/production_nginx/nginx.conf

worker_processes 1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        root   /usr/share/nginx/html;
        listen       80;
        server_name  zaz60.com;

        location / {
            index  index.html index.htm;
        }
    }
}

Сохранить.

$ mkdir src
$ nano src/index.html

Hi, I'am Nginx

Сохранить.

$ docker-compose up -d

$ docker-compose down

Вариант с SSL сертифиикатами

$ sudo chown -R user:user certs



$ nano /home/user/production_nginx/docker-compose.yml

version: '3'

services:
   nginx:
    image: nginx:latest
    container_name: production_nginx
    volumes:
     - ./src:/usr/share/nginx/html
     - ./nginx/nginx.conf:/etc/nginx/nginx.conf
     - ./certs:/etc/letsencrypt
    restart: always
    ports:
      - 80:80
      - 443:443

Сохранить.


$ sudo nano /home/user/production_nginx/nginx.conf

worker_processes 1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        root   /usr/share/nginx/html;
        listen       80;
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/zaz60.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/zaz60.com/privkey.pem;
        server_name  zaz60.com;

        location / {
            index  index.html index.htm;
        }
    }
}

Сохранить.

$ mkdir src
$ nano src/index.html

Hi, I'am Nginx

Сохранить.

$ docker-compose up -d

$ docker-compose down