SEMAPHORE! Автоматизация Linux

Сегодня развернем в докере сервер автоматизации под названием Semaphore. Сразу к делу…

mkdir /root/semaphore
mkdir /my_ssl
nano /root/semaphore/docker-compose.yaml

Создали папки, заполняем докер файл… Естественно везде ставим свои пароли и значения если необходимо

services:
  postgres:
    restart: unless-stopped
    image: postgres:14
    hostname: postgres
    volumes:
      - semaphore-postgres:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: semaphore
      POSTGRES_PASSWORD: semaphore
      POSTGRES_DB: semaphore
    networks:
      default:
        ipv4_address: 172.20.0.100

  web:
    image: nginx
    restart: unless-stopped
    volumes:
       - ./nginx.conf:/etc/nginx/nginx.conf
       - /my_ssl:/etc/nginx/cert
    ports:
       - "80:80"
       - "443:443"
    networks:
      default:
        ipv4_address: 172.20.0.102

  semaphore:
    restart: unless-stopped
    ports:
      - 3000:3000
    image: semaphoreui/semaphore:latest
    environment:
      SEMAPHORE_DB_USER: semaphore
      SEMAPHORE_DB_PASS: semaphore
      SEMAPHORE_DB_HOST: postgres
      SEMAPHORE_DB_PORT: 5432
      SEMAPHORE_DB_DIALECT: postgres
      SEMAPHORE_DB: semaphore
      SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/
      SEMAPHORE_ADMIN_PASSWORD: PASS
      SEMAPHORE_ADMIN_NAME: admin
      SEMAPHORE_ADMIN_EMAIL: admin@mail.ru
      SEMAPHORE_ADMIN: admin
      SEMAPHORE_ACCESS_KEY_ENCRYPTION: uWDFSdf234wDAKgvsHrV9Z/teoVQ4geotcogxaBg=
      SEMAPHORE_LDAP_ACTIVATED: 'no' # if you wish to use ldap, set to: 'yes'
      SEMAPHORE_SCHEDULE_TIMEZONE: Asia/Yekaterinburg
      TZ: Asia/Yekaterinburg
      ANSIBLE_HOST_KEY_CHECKING: "False"
    volumes:
      - ./playbooks:/home/semaphore/playbooks
      - /my_ssl:/home/semaphore/ssl
    depends_on:
      - postgres
    networks:
      default:
        ipv4_address: 172.20.0.103

volumes:
  semaphore-postgres:

networks:
  default:
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/16

В данном примере создается подключение по https, поэтому нужны сертификаты, их кидаем в папку /my_ssl. Так же нам необходимо настроить прокси. Для этого создадим файлик nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
        server {
          listen 443 ssl;
          server_name  semaphore.domain.com;

          # add Strict-Transport-Security to prevent man in the middle attacks
          add_header Strict-Transport-Security "max-age=31536000" always;

          # SSL
          ssl_certificate /etc/nginx/cert/fullchain.pem;
          ssl_certificate_key /etc/nginx/cert/privkey.pem;

          # Recommendations from
          # https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx/
          #ssl_protocols TLSv1.1 TLSv1.2;
          ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
          #ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
          ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;


          ssl_prefer_server_ciphers on;
          ssl_session_cache shared:SSL:10m;

          # required to avoid HTTP 411: see Issue #1486
          # (https://github.com/docker/docker/issues/1486)
          chunked_transfer_encoding on;

          location / {
            proxy_pass http://172.20.0.103:3000/;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header X-Forwarded-Proto $scheme;

            proxy_buffering off;
            proxy_request_buffering off;
          }

          location /api/ws {
            proxy_pass http://172.20.0.103:3000/api/ws;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Origin "";
          }
        }

        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;

        sendfile        on;
        #tcp_nopush     on;

        keepalive_timeout  65;

        #gzip  on;

        include /etc/nginx/conf.d/*.conf;
}

После этого запускаем наш докер-компоуз. Т.к. у нас защищенное соединение, необходимо подключаться по DNS имени. Поэтому необходимо в DNS прописать актуальные значения, или в файле hosts на windows.

После этого мы должны попасть на главную страницу.

Логин и пароль вводим те же, что и файлик docker-compose.yaml

Нам сразу же предложит ввести имя проекта.

Заполняем поля и жмем CREATE

Можно сменить язык при необходимости.