To solve Luca's investment problem using linear programming, we first need to define the decision variables and the constraints based on the given conditions.

Let:
- \(x_f\) be the amount invested in the fishing industry.
- \(x_e\) be the amount invested in the education industry.

The objective is to maximize profit. The profit from the fishing industry is $1.30 for each dollar invested, and the profit from the education industry is $2.10 for each dollar invested. Thus, the total profit can be represented as \(1.30x_f + 2.10x_e\).

There are several constraints:
1. **Total Investment Constraint**: The total amount invested should not exceed $20,000.
\[x_f + x_e \leq 20000\]

2. **Minimum Education Investment Constraint**: At least $5,000 must be invested in the education industry.
\[x_e \geq 5000\]

3. **Fishing Industry Investment Percentage Constraint**: At least 30% of all money invested must be in the fishing industry. This can be represented as:
\[\frac{x_f}{x_f + x_e} \geq 0.30\]
However, to linearize this constraint (since linear programming requires linear constraints), we multiply both sides by \(x_f + x_e\) (which is non-negative) and maintain the direction of the inequality because \(x_f + x_e > 0\):
\[x_f \geq 0.30(x_f + x_e)\]
Simplifying, we get:
\[x_f \geq 0.30x_f + 0.30x_e\]
\[0.70x_f \geq 0.30x_e\]
\[x_f \geq \frac{3}{7}x_e\]

Now, let's formulate the linear programming model:

**Maximize**: \(1.30x_f + 2.10x_e\)

**Subject to**:
- \(x_f + x_e \leq 20000\)
- \(x_e \geq 5000\)
- \(x_f \geq \frac{3}{7}x_e\)
- \(x_f, x_e \geq 0\) (non-negativity constraints)

Here is the Gurobi code to solve this problem:

```python
from gurobipy import *

# Create a new model
m = Model("Luca_Investment")

# Create variables
xf = m.addVar(vtype=GRB.CONTINUOUS, name="Fishing_Industry_Investment")
xe = m.addVar(vtype=GRB.CONTINUOUS, name="Education_Industry_Investment")

# Set the objective function
m.setObjective(1.30*xf + 2.10*xe, GRB.MAXIMIZE)

# Add constraints
m.addConstr(xf + xe <= 20000, "Total_Investment_Constraint")
m.addConstr(xe >= 5000, "Minimum_Education_Investment")
m.addConstr(xf >= (3/7)*xe, "Fishing_Industry_Percentage")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print("Fishing Industry Investment: $", xf.x)
    print("Education Industry Investment: $", xe.x)
    print("Total Profit: $", m.objVal)
else:
    print("No optimal solution found. Status:", m.status)

```