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 # CentOS2.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_pluginmysql_native_password3.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 ~/.bashrc3.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.confsudo 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 # 应该返回 PONG3.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] DescriptionApache Tomcat Afternetwork.target [Service] Typeforking EnvironmentCATALINA_PID/opt/tomcat/temp/tomcat.pid EnvironmentCATALINA_HOME/opt/tomcat EnvironmentCATALINA_BASE/opt/tomcat ExecStart/opt/tomcat/bin/startup.sh ExecStop/opt/tomcat/bin/shutdown.sh Userdevuser Groupdevuser Restarton-failure [Install] WantedBymulti-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 pm24. 环境验证与集成测试4.1 组件连通性测试MySQL连接测试mysql -u root -p -e SHOW DATABASES;Redis连接测试redis-cli -a yourpassword pingTomcat应用部署测试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使用UFWsudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw enableCentOS使用firewalldsudo firewall-cmd --permanent --add-servicessh sudo firewall-cmd --permanent --add-servicehttp sudo firewall-cmd --permanent --add-servicehttps sudo firewall-cmd --reload5.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 # CentOS6. 常见问题排查6.1 MySQL启动失败可能原因端口3306被占用数据目录权限问题内存不足解决方案sudo tail -n 100 /var/log/mysql/error.log # 查看错误日志 sudo chown -R mysql:mysql /var/lib/mysql # 修复权限6.2 Tomcat应用无法访问检查步骤确认Tomcat服务运行状态sudo systemctl status tomcat检查应用日志tail -f /opt/tomcat/logs/catalina.out验证端口监听sudo netstat -tulnp | grep 80806.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 17.2 Redis持久化配置编辑/etc/redis/redis.confsave 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:HeapDumpOnOutOfMemoryError8. 环境备份与迁移8.1 数据库备份MySQL全量备份mysqldump -u root -p --all-databases full_backup.sqlRedis备份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.xml8.3 完整环境迁移使用Docker容器化所有服务是更现代的迁移方案。可以为每个服务创建Dockerfile或使用docker-compose编排整个环境。示例docker-compose.ymlversion: 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] DescriptionNode Exporter Afternetwork.target [Service] Usernode_exporter Groupnode_exporter ExecStart/usr/local/bin/node_exporter [Install] WantedBymulti-user.target启动服务sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter9.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.yamlauth_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启动Lokinohup /usr/local/bin/loki -config.fileloki-local-config.yaml loki.log 21 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.shexport JAVA_OPTS-server -Xms2G -Xmx2G -XX:MetaspaceSize256M -XX:MaxMetaspaceSize512M -XX:UseG1GC -XX:MaxGCPauseMillis200 -XX:ParallelGCThreads4 -XX:ConcGCThreads2 -XX:InitiatingHeapOccupancyPercent70 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/opt/tomcat/logs/heapdump.hprof10.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 max200000 inactive20s; 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自动化安装Ansiblesudo 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执行playbookansible-playbook -i inventory.ini setup_env.yml11.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 --lts12. 容器化部署方案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 [archamd64] 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-world12.2 各组件容器化运行MySQL容器docker run --name mysql8 \ -e MYSQL_ROOT_PASSWORDyourpassword \ -p 3306:3306 \ -v /data/mysql:/var/lib/mysql \ -d mysql:8.0 \ --character-set-serverutf8mb4 \ --collation-serverutf8mb4_unicode_ciRedis容器docker run --name redis6 \ -p 6379:6379 \ -v /data/redis:/data \ -d redis:6 \ redis-server --requirepass yourpassword --appendonly yesTomcat容器docker run --name tomcat10 \ -p 8080:8080 \ -v /path/to/your/app:/usr/local/tomcat/webapps \ -d tomcat:10.012.3 使用Docker Compose编排创建docker-compose.ymlversion: 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