GitLab实现 HTTP 访问和 SMTP 邮件发送
本教程详细记录了如何配置 SMTP 邮件通知、实现外网 HTTP 访问,并分享在配置过程中遇到的问题及解决方法。
一、准备工作
- 安装 Docker:确保在 Synology NAS 上安装 Docker 应用。
- 下载 GitLab 镜像:在 Docker 应用中搜索并下载
gitlab/gitlab-ce
镜像。 - 端口规划:规划好 HTTP 访问端口和 SMTP 邮件端口,以确保在内外网环境下正常访问。
- 使用内网穿透工具(如花生壳):若 NAS 没有公网 IP,使用内网穿透工具实现外网访问。
二、配置 GitLab 的 SMTP 邮件发送功能
由于 GitLab 默认不启用邮件发送功能,需配置 SMTP 以实现邮件通知。
1. SMTP 配置(以 163 邮箱为例)
在 gitlab.rb
文件中添加以下 SMTP 设置:
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_user_name'] = "your_email@163.com"
gitlab_rails['smtp_password'] = "your_password"
gitlab_rails['smtp_domain'] = "smtp.163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_pool'] = false
2. 选择 SMTP 端口和加密配置
-
SSL 端口(465):
gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_enable_starttls_auto'] = false gitlab_rails['smtp_tls'] = true
-
TLS 端口(587):
gitlab_rails['smtp_port'] = 587 gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = false
-
非加密端口(25):
gitlab_rails['smtp_port'] = 25 gitlab_rails['smtp_enable_starttls_auto'] = false gitlab_rails['smtp_tls'] = false
3. 设置发件人邮箱
gitlab_rails['gitlab_email_from'] = 'your_email@163.com'
4. 重启 GitLab 并测试邮件发送
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
进入 GitLab 控制台,测试邮件发送:
gitlab-rails console
Notify.test_email('test@example.com', 'Test Subject', 'This is a test message').deliver_now
三、配置 GitLab 的外网 HTTP 访问
1. 配置 external_url 为 HTTP
在 gitlab.rb
文件中设置 HTTP 访问地址:
external_url 'http://yourdomain.peanuthull.com:8080'
2. 配置 Nginx 监听 HTTP 端口
确保 GitLab 内置的 Nginx HTTP 配置如下:
nginx['enable'] = true
nginx['listen_port'] = 80
nginx['redirect_http_to_https'] = false
3. 设置端口映射
- Docker 中将宿主机 8080 端口映射到 GitLab 容器的 80 端口。
- 花生壳中将外网 8080 端口映射到 GitLab 的 HTTP 端口(80)。
4. 重启 GitLab 服务
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
四、进入 GitLab Docker 容器
在调试或配置过程中,可进入容器以检查配置或查看日志。
1. 查看 GitLab 容器 ID
docker ps
2. 进入容器
docker exec -it <container_id> /bin/bash
五、配置 GitLab 的 HTTPS 访问
为了进一步保障访问安全,可以为 GitLab 配置 HTTPS 访问。以下是步骤:
1. 准备证书和密钥
需要获得 SSL 证书和密钥。可以使用已经购买的证书,或者使用免费的 SSL 自签证书。
2. 备份 GitLab 的配置文件
更改之前,备份 GitLab 配置文件。默认可以在 /etc/gitlab/gitlab.rb
中找到该文件。
3. 编辑 GitLab 的配置文件
- 使用编辑器打开
/etc/gitlab/gitlab.rb
文件。 - 修改
external_url
行,更改为您自己的域名:external_url 'http://gitlab.example.com'
4. 配置 Nginx 并设置 SSL
要在 GitLab 上启用 HTTPS,需要使用 Nginx 的 Web 服务器作为反向代理并设置 SSL 证书和密钥。
- 在 GitLab Nginx 配置文件中(默认路径为
/etc/gitlab/gitlab.rb
),添加以下行以启用 SSL:- 启用重定向:
nginx['redirect_http_to_https'] = true
- 配置证书路径:
nginx['ssl_certificate'] = "/opt/gitlab/certs/checkqq.com.crt" nginx['ssl_certificate_key'] = "/opt/gitlab/certs/checkqq.com.key"
- 启用重定向:
5. 重新配置 GitLab
运行以下命令以重新加载配置并应用更改:
sudo gitlab-ctl reconfigure
6. 重启 GitLab
重启 GitLab 服务:
sudo gitlab-ctl restart
六、常见问题与解决方法
-
422 错误(The change you requested was rejected)
确保external_url
中的域名与实际访问的 URL 一致,清除浏览器缓存和 Cookie 后重试。 -
HTTP 和 HTTPS 混淆
确保external_url
和 Nginx 的协议一致。如果仅需 HTTP 访问,将external_url
设置为 HTTP,并禁用 HTTPS 配置。 -
SMTP 端口配置错误
确保smtp_port
、smtp_tls
和smtp_enable_starttls_auto
设置与服务商要求一致。
七、总结
通过以上步骤,你可以成功在 Synology NAS 上通过 Docker 安装 GitLab,配置 SMTP 邮件发送功能及 HTTP 外网访问。