当前位置: 首页 > news >正文

Linux开发环境搭建全攻略:从零到生产部署

1. 环境搭建前的准备工作

第一次在Linux上搭建开发环境时,我被各种依赖关系和配置问题折磨得够呛。经过多次实践,我总结出了这套"零失败"的搭建方案。这个教程会带你从零开始,在纯净的Linux系统上搭建完整的开发环境栈。

你需要准备:

  • 一台安装好Linux的服务器或虚拟机(推荐Ubuntu 22.04 LTS或CentOS 8)
  • 稳定的网络连接
  • 至少2GB内存(4GB以上更佳)
  • 20GB可用磁盘空间

重要提示:所有操作建议在普通用户下进行,使用sudo获取root权限。避免直接使用root账户操作,这是Linux系统管理的基本安全准则。

2. 基础环境配置

2.1 系统更新与基础工具安装

首先更新系统软件包并安装常用工具:

sudo apt update && sudo apt upgrade -y # Ubuntu/Debian # 或者 sudo yum update -y && sudo yum upgrade -y # CentOS/RHEL # 安装基础工具集 sudo apt install -y curl wget vim git unzip net-tools # Ubuntu sudo yum install -y curl wget vim git unzip net-tools # CentOS

2.2 创建专用用户(可选但推荐)

为开发环境创建专用用户是个好习惯:

sudo adduser devuser sudo usermod -aG sudo devuser # 授予sudo权限 su - devuser # 切换到新用户

3. 核心组件安装与配置

3.1 MySQL 8.0安装

MySQL 8是目前最稳定的版本,提供了窗口函数、CTE等高级特性。

安装步骤:

# Ubuntu wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb sudo apt update sudo apt install -y mysql-server # CentOS sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm sudo yum install -y mysql-community-server

安全配置:

sudo mysql_secure_installation

按照提示设置root密码,移除匿名用户,禁止root远程登录等。

常用命令:

sudo systemctl start mysql # 启动 sudo systemctl enable mysql # 设置开机自启 mysql -u root -p # 登录

避坑指南:MySQL 8默认使用caching_sha2_password认证插件,如果遇到客户端连接问题,可以在my.cnf中添加default_authentication_plugin=mysql_native_password

3.2 JDK 17安装

Java 17是当前的LTS版本,提供了密封类、模式匹配等新特性。

安装OpenJDK 17:

# Ubuntu sudo apt install -y openjdk-17-jdk # CentOS sudo yum install -y java-17-openjdk-devel

验证安装:

java -version # 应该输出类似:openjdk version "17.0.3" 2022-04-19

环境变量配置(可选):

echo 'export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc

3.3 Redis安装与配置

Redis是高性能的键值存储系统,常用于缓存和会话存储。

安装最新稳定版:

# Ubuntu sudo apt install -y redis-server # CentOS sudo yum install -y epel-release sudo yum install -y redis

基本配置:编辑/etc/redis/redis.conf:

sudo vim /etc/redis/redis.conf

建议修改:

  • bind 127.0.0.1 → bind 0.0.0.0(如需远程访问)
  • requirepass yourpassword(设置密码)
  • maxmemory 1gb(根据服务器内存调整)

启动服务:

sudo systemctl start redis sudo systemctl enable redis

测试连接:

redis-cli 127.0.0.1:6379> ping # 应该返回 PONG

3.4 Tomcat 10安装

Tomcat 10支持Servlet 5.0和JSP 3.0规范。

安装步骤:

wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.23/bin/apache-tomcat-10.0.23.tar.gz tar -xzf apache-tomcat-10.0.23.tar.gz sudo mv apache-tomcat-10.0.23 /opt/tomcat

环境变量配置:

echo 'export CATALINA_HOME=/opt/tomcat' >> ~/.bashrc source ~/.bashrc

创建系统服务:

sudo vim /etc/systemd/system/tomcat.service

添加以下内容:

[Unit] Description=Apache Tomcat After=network.target [Service] Type=forking Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh User=devuser Group=devuser Restart=on-failure [Install] WantedBy=multi-user.target

启动服务:

sudo systemctl daemon-reload sudo systemctl start tomcat sudo systemctl enable tomcat

访问http://服务器IP:8080应该能看到Tomcat欢迎页面。

3.5 Nginx安装与配置

Nginx是高性能的Web服务器和反向代理。

安装最新稳定版:

# Ubuntu sudo apt install -y nginx # CentOS sudo yum install -y epel-release sudo yum install -y nginx

基本配置:编辑/etc/nginx/nginx.conf,建议调整:

  • worker_processes auto;(自动匹配CPU核心数)
  • keepalive_timeout 65;
  • 在http块中添加server_names_hash_bucket_size 64;

常用命令:

sudo systemctl start nginx sudo systemctl enable nginx sudo nginx -t # 测试配置 sudo systemctl reload nginx # 重载配置

配置反向代理(示例):

sudo vim /etc/nginx/conf.d/tomcat.conf

添加:

server { listen 80; server_name yourdomain.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }

3.6 Node.js安装

Node.js是JavaScript运行时,用于前端构建和全栈开发。

通过NVM安装(推荐):

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash source ~/.bashrc nvm install --lts # 安装最新LTS版本 nvm use --lts

验证安装:

node -v npm -v

全局常用工具安装:

npm install -g yarn pm2

4. 环境验证与集成测试

4.1 组件连通性测试

MySQL连接测试:

mysql -u root -p -e "SHOW DATABASES;"

Redis连接测试:

redis-cli -a yourpassword ping

Tomcat应用部署测试:

wget https://tomcat.apache.org/tomcat-10.0-doc/appdev/sample/sample.war mv sample.war /opt/tomcat/webapps/

访问http://服务器IP:8080/sample/

4.2 压力测试准备

安装Apache Benchmark工具:

sudo apt install -y apache2-utils # Ubuntu sudo yum install -y httpd-tools # CentOS

测试Nginx静态文件性能:

ab -n 1000 -c 100 http://localhost/

测试Tomcat动态内容性能:

ab -n 500 -c 50 http://localhost:8080/sample/

5. 安全加固与优化建议

5.1 防火墙配置

Ubuntu使用UFW:

sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw enable

CentOS使用firewalld:

sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload

5.2 定期维护任务

日志轮转:

sudo vim /etc/logrotate.d/tomcat

添加:

/opt/tomcat/logs/catalina.out { daily rotate 30 missingok compress copytruncate }

自动更新:

sudo apt install -y unattended-upgrades # Ubuntu sudo yum install -y yum-cron # CentOS

6. 常见问题排查

6.1 MySQL启动失败

可能原因:

  • 端口3306被占用
  • 数据目录权限问题
  • 内存不足

解决方案:

sudo tail -n 100 /var/log/mysql/error.log # 查看错误日志 sudo chown -R mysql:mysql /var/lib/mysql # 修复权限

6.2 Tomcat应用无法访问

检查步骤:

  1. 确认Tomcat服务运行状态:
sudo systemctl status tomcat
  1. 检查应用日志:
tail -f /opt/tomcat/logs/catalina.out
  1. 验证端口监听:
sudo netstat -tulnp | grep 8080

6.3 Nginx 502 Bad Gateway

可能原因:

  • 后端服务(Tomcat)未运行
  • 代理配置错误
  • 防火墙阻止

排查命令:

sudo nginx -t # 测试配置 sudo tail -f /var/log/nginx/error.log # 查看错误日志 curl -v http://localhost:8080 # 测试后端服务

7. 进阶配置建议

7.1 数据库主从复制

主库配置(/etc/mysql/my.cnf):

[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_format = ROW

从库配置:

[mysqld] server-id = 2 relay_log = /var/log/mysql/mysql-relay-bin read_only = 1

7.2 Redis持久化配置

编辑/etc/redis/redis.conf:

save 900 1 # 15分钟内至少1个key变化 save 300 10 # 5分钟内至少10个key变化 save 60 10000 # 1分钟内至少10000个key变化 appendonly yes # 开启AOF持久化

7.3 JVM调优参数

在/opt/tomcat/bin/setenv.sh中添加:

export JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError"

8. 环境备份与迁移

8.1 数据库备份

MySQL全量备份:

mysqldump -u root -p --all-databases > full_backup.sql

Redis备份:

redis-cli save # 同步保存 # 或者 redis-cli bgsave # 后台保存

8.2 应用配置备份

打包关键配置:

tar -czvf server_configs.tar.gz \ /etc/mysql/my.cnf \ /etc/redis/redis.conf \ /etc/nginx/nginx.conf \ /opt/tomcat/conf/server.xml

8.3 完整环境迁移

使用Docker容器化所有服务是更现代的迁移方案。可以为每个服务创建Dockerfile,或使用docker-compose编排整个环境。

示例docker-compose.yml:

version: '3' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: yourpassword volumes: - mysql_data:/var/lib/mysql redis: image: redis:6 command: redis-server --requirepass yourpassword tomcat: image: tomcat:10.0 ports: - "8080:8080" volumes: mysql_data:

9. 监控与维护

9.1 基础监控设置

安装Prometheus Node Exporter监控服务器指标:

wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz tar -xzf node_exporter-*.tar.gz sudo mv node_exporter-*/node_exporter /usr/local/bin/ sudo useradd -rs /bin/false node_exporter

创建系统服务:

sudo vim /etc/systemd/system/node_exporter.service

内容:

[Unit] Description=Node Exporter After=network.target [Service] User=node_exporter Group=node_exporter ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target

启动服务:

sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter

9.2 日志集中管理

安装Loki日志收集系统:

wget https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip unzip loki-linux-amd64.zip sudo mv loki-linux-amd64 /usr/local/bin/loki

创建配置文件loki-local-config.yaml:

auth_enabled: false server: http_listen_port: 3100 common: path_prefix: /tmp/loki storage: filesystem: chunks_directory: /tmp/loki/chunks rules_directory: /tmp/loki/rules replication_factor: 1 ring: instance_addr: 127.0.0.1 kvstore: store: inmemory schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h

启动Loki:

nohup /usr/local/bin/loki -config.file=loki-local-config.yaml > loki.log 2>&1 &

10. 性能调优实战

10.1 MySQL性能优化

关键参数调整(/etc/mysql/my.cnf):

[mysqld] innodb_buffer_pool_size = 1G # 总内存的50-70% innodb_log_file_size = 256M innodb_flush_log_at_trx_commit = 2 # 平衡性能与持久性 innodb_flush_method = O_DIRECT innodb_read_io_threads = 8 innodb_write_io_threads = 4 query_cache_type = 0 # MySQL 8已移除查询缓存

10.2 JVM调优实战

Tomcat优化(setenv.sh):

export JAVA_OPTS="-server -Xms2G -Xmx2G -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2 -XX:InitiatingHeapOccupancyPercent=70 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/logs/heapdump.hprof"

10.3 Nginx高性能配置

优化示例(nginx.conf部分配置):

worker_processes auto; worker_rlimit_nofile 100000; events { worker_connections 4096; multi_accept on; use epoll; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 30; keepalive_requests 1000; reset_timedout_connection on; open_file_cache max=200000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; gzip on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "MSIE [1-6]\."; }

11. 自动化部署方案

11.1 使用Ansible自动化

安装Ansible:

sudo apt install -y ansible # Ubuntu sudo yum install -y ansible # CentOS

创建playbook文件setup_env.yml:

--- - hosts: all become: yes tasks: - name: Install common packages apt: name: "{{ item }}" state: present with_items: - curl - wget - vim - git - unzip - net-tools - name: Install MySQL apt: name: mysql-server state: present - name: Install OpenJDK 17 apt: name: openjdk-17-jdk state: present

执行playbook:

ansible-playbook -i inventory.ini setup_env.yml

11.2 使用Shell脚本自动化

创建安装脚本install_stack.sh:

#!/bin/bash # 系统更新 sudo apt update && sudo apt upgrade -y # 安装基础工具 sudo apt install -y curl wget vim git unzip net-tools # 安装MySQL sudo apt install -y mysql-server sudo mysql_secure_installation # 安装JDK sudo apt install -y openjdk-17-jdk # 安装Redis sudo apt install -y redis-server # 安装Nginx sudo apt install -y nginx # 安装Node.js curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash source ~/.bashrc nvm install --lts

12. 容器化部署方案

12.1 Docker基础安装

安装Docker引擎:

# Ubuntu sudo apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io # CentOS sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker

验证安装:

sudo docker run hello-world

12.2 各组件容器化运行

MySQL容器:

docker run --name mysql8 \ -e MYSQL_ROOT_PASSWORD=yourpassword \ -p 3306:3306 \ -v /data/mysql:/var/lib/mysql \ -d mysql:8.0 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci

Redis容器:

docker run --name redis6 \ -p 6379:6379 \ -v /data/redis:/data \ -d redis:6 \ redis-server --requirepass yourpassword --appendonly yes

Tomcat容器:

docker run --name tomcat10 \ -p 8080:8080 \ -v /path/to/your/app:/usr/local/tomcat/webapps \ -d tomcat:10.0

12.3 使用Docker Compose编排

创建docker-compose.yml:

version: '3.8' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: yourpassword MYSQL_DATABASE: appdb volumes: - mysql_data:/var/lib/mysql ports: - "3306:3306" restart: always redis: image: redis:6 command: redis-server --requirepass yourpassword --appendonly yes volumes: - redis_data:/data ports: - "6379:6379" restart: always tomcat: image: tomcat:10.0 volumes: - ./webapps:/usr/local/tomcat/webapps ports: - "8080:8080" depends_on: - mysql - redis restart: always volumes: mysql_data: redis_data:

启动服务:

docker-compose up -d
http://www.jsqmd.com/news/1252502/

相关文章:

  • PHP-CPP项目解析:用C++为PHP打造高性能扩展
  • 微信文章导入本地AI知识库的完整指南
  • 2026年AI客服智能体的技术演进与行业落地
  • 基于YOLOv11的施工现场安全智能监控系统设计与实现
  • AI训练新发现:重复数据训练提升模型效果
  • 多模态AI技术解析:Raven-1模型与情感计算应用
  • Unity游戏开发中的事件总线模式:实现模块解耦与高效通信
  • 长沙积家回收怎么选?2026年7月最新客服服务评测,回收价格查询避坑指南攻略 - 天价名表回收平台
  • 用C++实现Brainfuck解释器:从极简指令到图灵完备运行时
  • 卡地亚官网指定东莞服务网点地址与热线电话(2026年7月最新发布) - 卡地亚官方售后中心
  • 智能文档比对技术解析与应用实践
  • Linux内核4000万行代码的管理哲学与协作模式
  • 斯坦福AI组合泛化技术解析与应用实践
  • 基于MSP430与罗氏线圈的三相电能表设计:从硬件架构到软件校准全解析
  • C++实战:从零构建命令行工具wordcount,掌握工程化开发核心技能
  • 学术写作AI检测原理与降AI率实战技巧
  • 信管专业毕业设计选题与技术路线设计指南
  • AI音乐生成在咖啡店的应用与实战技巧
  • 天津江诗丹顿回收价格查询和各大回收平台实测排行(2026年7月最新) - 收的高名表回收平台
  • AI助手如何提升毕业论文写作效率与质量
  • 浪琴中国售后服务中心|详细热线及维修地址权威信息通告(2026年7月最新) - 浪琴服务中心
  • 商标转让平台推荐:2026 正规平台实力研判分析
  • 萧邦中国售后服务中心|服务热线及全部网点地址权威信息公告(2026年7月最新) - 萧邦中国官方服务中心
  • AI在保险理赔欺诈检测中的应用与优化
  • Prompt工程实战:少样本与思维链技术解析
  • AI赋能低代码开发:技术原理与行业实践
  • 好时巧克力冬奥情感营销案例解析
  • AI智能对账系统:20倍效率提升的财务自动化实践
  • AIGC检测技术解析与降AI率工具实战测评
  • 2026年7月最新!温州爱彼回收商家排行出炉:渠道收的价格更高吗?避坑指南+客户真实反馈全整理! - 尊奢回收二奢平台