GitLab on Docker
GitLab のバージョンアップしてみたところ、スクリプトエラーになってしまうので、作り直そうかと。
せっかくなので、GitLab は Docker でも動作させることができるようなので、Docker やってみよう。
OS もサポートが終わりそうなので CentOS Stream にしますか。
インストールの参考は、GitLab Docker images (docs.gitlab.com)
Docker
$ sudo dnf install -y yum-utils $ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
$ sudo dnf install -y docker-ce docker-ce-cli containerd.io
$ sudo systemctl start docker $ sudo systemctl enable docker
Install Docker Compose (docs.docker.com)
$ sudo curl -L https://github.com/docker/compose/releases/download/1.28.2/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose $ sudo source /etc/bash_completion.d/docker-compose
GitLab
$ mkdir -p /var/opt/docker/gitlab
SSHのポート変更しないと、dockerのホストのSSHと被り、起動しないので、変更する。
また、HTTPS でなく、HTTPの設定を入れる。
web: image: 'gitlab/gitlab-ce:latest' restart: always hostname: 'gitlab.lab.local' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab.lab.local' # HTTP setting nginx['listen_https'] = false nginx['listen_port'] = 80 nginx['redirect_http_to_https'] = false letsencrypt['enable'] = false # SSH port gitlab_rails['gitlab_shell_ssh_port'] = 2224 # Time Zone gitlab_rails['time_zone'] = 'Asia/Tokyo' # LDAP setting gitlab_rails['ldap_enabled'] = true gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' main: # 'main' is the GitLab 'provider ID' of this LDAP server label: 'Active Directory' host: 'lab.local' port: 636 uid: 'sAMAccountName' bind_dn: 'CN=GitLab,CN=Users,DC=lab,DC=local' password: 'gitlabuser' encryption: 'simple_tls' # "start_tls" or "simple_tls" or "plain" verify_certificates: false smartcard_auth: false active_directory: true allow_username_or_email_login: true lowercase_usernames: true block_auto_created_users: false base: 'DC=lab,DC=local' user_filter: '' EOS ports: - '80:80' - '443:443' - '2224:22' volumes: - '/var/opt/docker/gitlab/config:/etc/gitlab:Z' - '/var/opt/docker/gitlab/logs:/var/log/gitlab:Z' - '/var/opt/docker/gitlab/data:/var/opt/gitlab:Z'
$ docker-compose up -d
$ sudo firewall-cmd --add-port=2224/tcp --permanent $ sudo firewall-cmd --add-service={http,https} --permanent $ sudo firewall-cmd --reload
以上で、ブラウザからアクセスできるようになる。
Exment 構築(LDAP連携設定)
Exment のログインをADを使ってログインできるように設定する。
- 管理者でログインする
- 左のメニューの「システム設定」をクリック
- 右上の「システム設定」ボタンをクリック
- 「ログイン設定」をクリック
- 右上の「+新規」ボタンをクリック
- 設定する
記載したもの以外は任意で設定すればOK
項目名 | 設定値 | 備考 |
---|---|---|
ログイン設定表示名 | 任意 | |
ログイン種類 | LDAP認証 | |
LDAP名(英数字) | lab | ドメイン名 |
ホスト名 | 192.168.200.1 | DC のアドレス |
ポート番号 | 636 | |
基本DN(識別名) | dc=lab,dc=local | ドメインのDN |
ユーザー検索属性 | userPrincipalName | |
ログインコード接頭辞 | ||
ログインコード接尾辞 | @lab.local | ドメイン |
SSL使用 | YES | |
TLS使用 | YES | |
ユーザーコード | sAMAccountName | |
ユーザー名 | cn | |
メールアドレス | ||
アカウント検索列 | ユーザーコード | |
ユーザー新規作成 | YES | YES にしない場合、事前にIDを作成しておく必要がある |
- 「保存」ボタンをクリック
- ログインテスト
- 「ログインテスト」ボタンをクリック
- ログインできるか確認する。
- 確認ができたら「閉じる」ボタンをクリックする。
- 「有効化する」ボタンをクリック
ログアウトすると、ログインボタンが増え、ドメインのID、パスワードを入力し、ADのログインボタンでログインできるようになります。
Exment 構築
Exment という Web データベースを構築してみようと思います。 また、ログイン認証を DC でできるように設定も行おうと思います。
参考にする手順は下記。
インストール-概要 (exment.net)
Linuxによる環境構築 (exment.net)
OS 準備
動作 OS は CentOS 8 だと手順でエラーになるようなので、CentOS 7 で構築します。
項目 | 値 |
---|---|
ホスト名 | exment.lab.local |
IPアドレス | 192.168.200.20 |
SELinux 無効化
# vi /etc/selinux/config # grep -v -e '^\s*#' -e '^\s*$' /etc/selinux/config SELINUX=disabled SELINUXTYPE=targeted # reboot
パッケージインストール
# yum install -y epel-release # yum install -y wget unzip redis # yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm # yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm # yum install -y --enablerepo=remi-php72 httpd openssl mod_ssl mysql php72 php72-php php-mbstring php-mysqli php-dom php-gd.x86_64 php-zip php-ldap # yum install -y mysql-community-server
redis 設定
# vi /etc/redis.conf # grep -v -e '^\s*#' -e '^\s*$' /etc/redis.conf bind 0.0.0.0 ★変更 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 ~(省略)~ client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes # systemctl enable redis # systemctl start redis.service
Firewall 設定
# firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd --add-service=https --zone=public --permanent # firewall-cmd --reload
# firewall-cmd --permanent --new-zone=from_webserver # firewall-cmd --reload # firewall-cmd --permanent --zone=from_webserver --add-source="192.168.200.0/24" # firewall-cmd --permanent --zone=from_webserver --add-port=3306/tcp # firewall-cmd --zone=from_webserver --add-service=mysql # firewall-cmd --reload
# firewall-cmd --permanent --zone=from_webserver --add-port=6379/tcp # firewall-cmd --zone=from_webserver --add-service=redis # firewall-cmd --reload
PHP 準備
PHP のパス設定
# ln -s /usr/bin/php72 /usr/bin/php # php --version PHP 7.2.34 (cli) (built: Jan 4 2021 14:34:52) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
利用モジュールのインストール
# cd ~/ # php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" # php composer-setup.php # php -r "unlink('composer-setup.php');" # mv composer.phar /usr/local/bin/composer
# vi /etc/opt/remi/php72/php.ini # grep -v -e '^\s*;' -e '^\s*$' /etc/opt/remi/php72/php.ini [PHP] engine = On short_open_tag = Off precision = 14 output_buffering = 4096 zlib.output_compression = Off implicit_flush = Off ~(省略)~ [curl] [openssl] extension=mbstring.so ★追加 extension=dom.so ★追加 extension=xml.so ★追加 extension=gd.so ★追加 extension=simplexml.so ★追加 extension=xmlreader.so ★追加 extension=xmlwriter.so ★追加 extension=zip.so ★追加 extension=mysqlnd.so ★追加 extension=mysqli.so ★追加 extension=pdo.so ★追加 extension=pdo_mysql.so ★追加 extension_dir=/usr/lib64/php/modules/ ★追加 extension=ldap.so ★追加
HTTP 設定
# vi /etc/httpd/conf/httpd.conf # grep -v -e '^\s*#' -e '^\s*$' /etc/httpd/conf/httpd.conf ServerRoot "/etc/httpd" Listen 80 Include conf.modules.d/*.conf User apache Group apache ServerAdmin root@localhost ~(省略)~ AddDefaultCharset UTF-8 <IfModule mime_magic_module> MIMEMagicFile conf/magic </IfModule> EnableSendfile on IncludeOptional conf.d/*.conf <VirtualHost *:80> ★追加 DocumentRoot /var/www/exment/public ★追加 <Directory /var/www/exment/public> ★追加 Allow from all ★追加 AllowOverride All ★追加 Require all granted ★追加 </Directory> ★追加 </VirtualHost> ★追加 # systemctl enable httpd.service # systemctl start httpd.service
Exment インストール
# cd /var/www # wget https://exment.net/downloads/ja/exment.zip # unzip exment.zip # rm exment.zip -f # cd exment # chown apache:apache -R /var/www/exment # chmod 775 -R /var/www/exment/storage # chmod 775 -R /var/www/exment/bootstrap/cache
MySQL
MySQL 設定
# systemctl enable mysqld.service # systemctl start mysqld.service # cat /var/log/mysqld.log | grep password 2016-09-01T13:09:03.337119Z 1 [Note] A temporary password is generated for root@localhost: uhsd!XXXXXX
root@localhost: 以降がパスワードをメモする。
# vi /etc/my.cnf # grep -v -e '^\s*#' -e '^\s*$' /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 validate-password=OFF ★追加 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid # systemctl restart mysqld.service
DB 初期化
# mysql_secure_installation Enter password for user root: (先ほど残したパスワードを入力) New password: (新しいパスワードを入力) Re-enter new password: (新しいパスワードを入力) Change the password for root? : y Remove anonymous users? : y #匿名ユーザーアカウントを削除 Disallow root login remotely? : y # ローカルホスト以外からアクセス可能な root アカウントを削除 Remove test database and access to it? : y # test データベースの削除 Reload privilege tables now? : y #privilegeテーブルを再読込
DB 構築
# mysql -u root -p Enter password: (パスワード) mysql> CREATE DATABASE exment_database; mysql> CREATE USER 'exment_user'@'192.168.200.%' IDENTIFIED BY '(exment_user用のパスワード)'; mysql> GRANT ALL ON exment_database.* TO exment_user identified by '(exment_user用のパスワード)'; mysql> FLUSH PRIVILEGES; mysql> quit
LDAP 関連インストール
# COMPOSER_MEMORY_LIMIT=-1 composer require predis/predis # COMPOSER_MEMORY_LIMIT=-1 composer require adldap2/adldap2-laravel
.env
# vi .env # cat .env APP_NAME=Laravel APP_ENV=local APP_KEY=base64:XXXXXXXXXXXXXXXXXXXX APP_DEBUG=true APP_URL=http://192.168.200.20 ★変更 APP_LOCALE=ja ★追加 APP_TIMEZONE=Asia/Tokyo ★追加 LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=exment_database ★変更 DB_USERNAME=exment_user ★変更 DB_PASSWORD=<設定したパスワード> ★変更 ~(省略)~ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" EXMENT_INITIALIZE=1 ★追加
証明書チェック無効
# vi /etc/openldap/ldap.conf # grep -v -e '^\s*#' -e '^\s*$' /etc/openldap/ldap.conf TLS_CACERTDIR /etc/openldap/certs SASL_NOCANON on TLS_REQCERT never ★追加 # systemctl restart httpd
Exment 設定
初期設定
ブラウザで、 http://192.168.200.20/admin にアクセスする。 画面に従って完了させる
Ansible 環境構築
YAML 形式の Playbook を作成して、構築が行える Ansible。
Ansible を使って、環境を構築できるように Ansible 環境を構築します~
環境の構成としては、とりあえず、以下。
【Ansible サーバ】
192.168.200.13
【対象端末】
192.168.200.21
Ansible インストール
まずは、RPM のパッケージをインストールして、Ansible サーバを構築します。
# dnf -y install epel-release # dnf -y install ansible
# ansible --version ansible 2.9.14 config file = /etc/ansible/ansible.cfg configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.6/site-packages/ansible executable location = /usr/bin/ansible python version = 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
パスワードなしで、対象端末を操作できるように鍵を生成する。
# ssh-keygen -t rsa -f $HOME/.ssh/id_rsa -N ""
Ansible で制御する端末を準備
Ansible で制御するには、対象の端末に以下の準備が必要になります。
作業は、対象端末上で行います。
- Ansible 専用のアカウントの追加
- パスワードなしで、root 権限でコマンドを実行できるように、設定
# useradd ansible # passwd ansible
sudoers に ansible アカウントをパスワードなしで、実行できるように、設定を追加します。
# visudo ansible ALL=(ALL) NOPASSWD: ALL
Ansible サーバで、動作確認実施。
[root@ansible]$ ssh ansible@192.168.200.21 Last login: Xxx Xxx xx xx:xx:xx xxxx from 192.168.200.13 [ansible@target]$ sudo su - Last login: Xxx Xxx xx xx:xx:xx xxxx from tty1 [root@target]$
Ansible サーバに対象を登録して、動作確認
制御端末のKeyを登録して、パスワード入力なしに制御できるようにします。
Ansible サーバで行います。
[root@ansible]$ ssh-copy-id ansible@192.168.200.21 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys ansible@192.168.250.21's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'ansible@192.168.200.21'" and check to make sure that only the key(s) you wanted were added.
設定を作成して、Ansible の ping モジュールを使って、動作するか確認します。
$ vi inventory/hosts [test] 192.168.200.21 ansible_user=ansible
$ ansible -i inventory/hosts test -m ping 192.168.200.21 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" }
ここまでくれば、Ansible の Playbook を作成して、実行することで、Ansible を使った構築ができる!
Git Runner (Linux)
GitHub にコミットすると、ビルドする Git Runner の Linux 版を構築する。 公式には、Docker を使うのが推奨らしいが、VMでTry.
Git Runner が CentOS 8 未対応っぽい。(リポジトリみても、バイナリがない) なので、CentOS 7 の VM を作成。
最小構成でセットアップして、yum で最新化しておく。
ビルドに必要なツール類をインストール。
# yum -y groupinstall "Development Tools"
次にGit Runner をインストールする。
リポジトリ情報取得 # curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash yum でインストール # yum -y install gitlab-runner
Git Runner 登録をする。
リポジトリ 取得 # gitlab-runner register
Git Runner (Windows)
GitHub にコミットすると、ビルドする Git Runner の Windows 版を構築する。 まず、Windows マシンを構築。 ビルド環境に、Visual Studio Community をセットアップ!
Visual Studio Communit (visualstudio.microsoft.com) からセットアップの EXE をダウンロードして、インストールする。 なんでもできるように、一応、全オプション ON で。(^^;
次に、Git Runner は、Git を使ってソースを取得するので、 Downloading Git (git-scm.com) から取得して、Git をインストール。
最後に、 Files / master / GitLab.org / gitlab-runner / GitLab () Git Runner を取得して、格納。 Download から対象の環境にあったバイナリを取得します。
コマンドプロンプトを管理者権限で実行して以下を実行。
> gitlab-runner-windows-amd64.exe register > gitlab-runner-windows-amd64.exe install
なお、register 時の入力の、URL, Token は、GitLab の Runners で表示されているものを入力。 また、Tag は、Windows とつけて、Windows のもののみを実行できるようにする。 executor は、shell で。
VSの環境変数BATがPowerShellだと微妙なので、cmdにする。 config.toml を編集します。
shell = "PowerShell"を
shell = "cmd"
GitLab の Runners に表示されていれば OK。
後は、Git のリポジトリに、.gitlab-ci.yml に設定を書いてコミットすれば、コミットすると、Runner で Build とかできる。 以下にサンプルを書いておく。
variables: MSBuildEnv: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat' stages: - build msbuild: stage: build tags: - Windows script: - chcp 65001 - Call "%MSBuildEnv%" - 'msbuild ConsoleApp.sln /t:clean;rebuild /p:Configuration=Release;Platform="Any CPU"' artifacts: paths: - ConsoleApp\bin\Release\ConsoleApp.exe - ConsoleApp\bin\Release\ConsoleApp.exe.config
GitLab構築
次に、GitLab を構築する。OS は、CentOS8 で。
パッケージの更新やら、ドメインの参加とかは、実施済みってことで進める。
GitLabの設定の際に、アクセスするアカウントとパスワードを設定する必要があるため、事前に、GitLab ユーザを作成しておく。
インストールの参考は以下。
Step 3: Install GitLab CE on CentOS 8 / RHEL 8 (computingforgeeks.com)
# dnf -y install curl \ vim \ policycoreutils \ python3-policycoreutils # curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash # dnf -y install gitlab-ce
認証をActive Directoryで行うように、GitLab の設定。
設定した個所は以下。
# vi /etc/gitlab/gitlab.rb # cat /etc/gitlab/gitlab.rb external_url 'http://gitlab.lab.local' gitlab_rails['time_zone'] = 'Asia/Tokyo' gitlab_rails['ldap_enabled'] = true gitlab_rails['ldap_servers'] = YAML.load <<-'EOS' main: # 'main' is the GitLab 'provider ID' of this LDAP server label: 'Active Directory' host: 'lab.local' port: 636 uid: 'sAMAccountName' bind_dn: 'CN=GitLab,CN=Users,DC=lab,DC=local' password: 'gitlabuser' encryption: 'simple_tls' # "start_tls" or "simple_tls" or "plain" verify_certificates: false smartcard_auth: false active_directory: true allow_username_or_email_login: true lowercase_usernames: true block_auto_created_users: false base: 'DC=lab,DC=local' user_filter: '' EOS # gitlab-ctl reconfigure 確認 # gitlab-rake gitlab:ldap:check RAILS_ENV=production Checking LDAP ... LDAP: ... Server: ldapmain not verifying SSL hostname of LDAPS server 'lab.local:636' LDAP authentication... Success LDAP users with access to your GitLab server (only showing the first 100 results) DN: cn=certificate service dcom access,cn=builtin,dc=lab,dc=local sAMAccountName: Certificate Service DCOM Access ~ 省略 ~ DN: cn=krbtgt,cn=users,dc=lab,dc=local sAMAccountName: krbtgt Checking LDAP ... Finished
Firewall を変更して、アクセスできるようにする。
# firewall-cmd --permanent --add-service={http,https} --permanent # firewall-cmd --reload
最後に、ブラウザでアクセスして、初期設定。
初回アクセスの場合、root のパスワード設定があるので、設定する。
その後、「Standard」を選択して、root でログインする。
あとは、GitLab の設定をいろいろカスタマイズ。
「Active Directory」を選択して、DC のアカウントでもログインできる。