在Ubuntu上部署GitLab前,需确保系统级权限设置正确,避免因权限问题导致服务异常。
GitLab默认以git用户和git组运行,确保其拥有数据目录的所有权:
sudo adduser --system --group --disabled-login --gecos '' git # 创建git用户及组(若未创建)
GitLab的核心数据目录为/var/opt/gitlab,需将其所有权赋予git:git,并设置合理权限(755允许所有者读写执行,其他用户仅读执行):
sudo chown -R git:git /var/opt/gitlab
sudo chmod -R 755 /var/opt/gitlab
用户通过SSH克隆/推送代码时,需确保其.ssh目录及密钥文件的权限正确:
chmod 700 ~/.ssh # 私钥目录权限必须为700
chmod 600 ~/.ssh/* # 私钥文件权限必须为600
若使用Nginx或Apache作为反向代理,需确保其有权访问GitLab的静态文件和日志目录:
sudo chown -R www-data:www-data /var/opt/gitlab/nginx/html # 静态文件目录
sudo chown -R www-data:www-data /var/log/gitlab # 日志目录
sudo chown -R www-data:www-data /var/opt/gitlab/apache2 # 静态文件目录
开放GitLab常用端口(HTTP:80、HTTPS:443、SSH:22),允许外部访问:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
若系统启用SELinux或AppArmor,需调整策略以避免拦截GitLab进程:
sudo setenforce 0 # 临时禁用SELinux(生产环境建议配置正确策略)
sudo aa-complain /etc/apparmor.d/usr.sbin.gitlab-runsvdir # AppArmor设置为投诉模式
GitLab通过角色、组、项目成员三级机制实现细粒度权限管理。
GitLab预定义了5种核心角色,权限从低到高排列:
通过GitLab Web界面(Settings > Users > New User)添加用户,填写用户名、邮箱、密码等信息,初始角色默认为Guest。
通过Groups > New Group创建组(如dev-team),用于归类用户并统一分配权限。创建后可设置组的可见性(私有/内部/公开)。
在组页面点击Members > Invite member,输入用户名或邮箱,选择角色(如Developer),点击Invite即可将用户添加到组中。
通过Project > Settings > Members管理项目成员:
Developer),用户将获得对应权限。Maintainer),组内所有用户将继承该角色权限。若内置角色无法满足需求,可通过修改GitLab源码自定义角色(需开发经验):
lib/gitlab/role.rb文件,添加新的权限规则(如deployer角色可部署代码)。sudo gitlab-ctl reconfigure并重启服务:sudo gitlab-ctl restart
若企业使用LDAP(如Active Directory)管理用户,可配置GitLab同步LDAP用户及权限:
/etc/gitlab/gitlab.rb中启用LDAP:gitlab_rails['ldap_enabled'] = true
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
main:
label: 'LDAP'
host: 'ldap.example.com'
port: 389
uid: 'uid'
method: 'plain'
bind_dn: 'cn=admin,dc=example,dc=com'
password: 'your_ldap_password'
user_search_base: 'ou=users,dc=example,dc=com'
user_search_filter: '(uid=%{username})'
EOS
sudo gitlab-ctl reconfigure应用配置,GitLab将自动同步LDAP用户,并继承其在LDAP中的组权限。Project > Settings > Members查看用户/组角色是否正确分配。~/.ssh目录及密钥文件权限是否正确(700/600)。ls -ld /var/opt/gitlab确认所有权为git:git,权限为755。/var/log/gitlab/)获取详细错误信息。